


/*-------------------------------------------------------------------------
 *
 * pg_amproc.h
 *	  "访问方法过程"系统目录 (pg_amproc) 的定义
 *
 * amproc 表识别与索引运算符族和类别相关联的支持过程。这些过程不能在 pg_amop 中列出，因为它们并不是任何可索引运算符的实现。
 *
 * 此表的主键是 <amprocfamily, amproclefttype, amprocrighttype, amprocnum>。家庭中特定 opclass 的 "默认" 支持函数是那些具有 amproclefttype = amprocrighttype = opclass 的 opcintype。这些是加载到索引的 relcache 中并通常用于内部索引操作的函数。其他支持函数通常用于处理 oprleft/oprright 与条目的 amproclefttype 和 amprocrighttype 匹配的跨类型可索引运算符。不过，确切的行为取决于索引 AM，而有些根本不关注非默认函数。
 *
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/catalog/pg_amproc.h
 *
 * NOTES
 *	  Catalog.pm 模块读取此文件并推导模式信息。
 *
 *-------------------------------------------------------------------------
 */
#ifndef PG_AMPROC_H
#define PG_AMPROC_H

#include "catalog/genbki.h"
#include "catalog/pg_amproc_d.h"

/* ----------------
 *		pg_amproc 定义。 cpp 将其转换为
 *		typedef struct FormData_pg_amproc
 * ----------------
 */
CATALOG(pg_amproc,2603,AccessMethodProcedureRelationId)
{
	Oid			oid;			/* oid */

	/* 此条目的索引操作族 */
	Oid			amprocfamily BKI_LOOKUP(pg_opfamily);

	/* 过程的左输入数据类型 */
	Oid			amproclefttype BKI_LOOKUP(pg_type);

	/* 过程的右输入数据类型 */
	Oid			amprocrighttype BKI_LOOKUP(pg_type);

	/* 支持过程索引 */
	int16		amprocnum;

	/* 过程的 OID */
	regproc		amproc BKI_LOOKUP(pg_proc);
} FormData_pg_amproc;

/* ----------------
 *		Form_pg_amproc 对应于一个指向拥有
 *		pg_amproc 关系格式的元组的指针。
 * ----------------
 */
typedef FormData_pg_amproc *Form_pg_amproc;

DECLARE_UNIQUE_INDEX(pg_amproc_fam_proc_index, 2655, AccessMethodProcedureIndexId, on pg_amproc using btree(amprocfamily oid_ops, amproclefttype oid_ops, amprocrighttype oid_ops, amprocnum int2_ops));
DECLARE_UNIQUE_INDEX_PKEY(pg_amproc_oid_index, 2757, AccessMethodProcedureOidIndexId, on pg_amproc using btree(oid oid_ops));

#endif							/* PG_AMPROC_H */
